草庐IT

Go switch vs if-else效率

全部标签

c++ - 删除 vector 的尾部(通过删除)内存效率高吗?

当做v.erase(some_iterator);实现是否足够智能,可以不进行任何重新分配/字节复制,因为我们可以只更新大小?(与严格删除内部元素不同。) 最佳答案 从std::vector删除不会使第一个删除元素之前的元素的迭代器和引用无效。因此,如果您只删除最后一个元素,则可以保证所有其他元素都保留在原处,不会移动或复制它们。但是,请注意,从std::vector中删除通常只会改变它的大小,而不是它的容量,因此旧对象所在的内存仍然由vector。这是出于性能原因,无需担心(除非您用完RAM)。另外,被删除的对象当然会被适本地销毁

c++ - 条件运算符会导致代码效率降低吗?

在返回对象时,?:是否会导致与if/else相比效率较低的代码?Fooif_else(){if(bla)returnFoo();elsereturnsomething_convertible_to_Foo;}如果bla为假,则返回的Foo直接从something_convertible_to_Foo构造。Fooquestion_mark_colon(){return(bla)?Foo():something_convertible_to_Foo;}这里,return之后的表达式类型是Foo,所以我想如果首先创建一些临时的Foobla为false以产生表达式的结果,然后必须复制构造该临时

c++ - else 语句似乎被忽略

voidPacketRecord::determineAppProtocol(){if(ipProtocol==IP_PROTO_UDP){std::istringstreamss(udpData);std::stringline;if(getline(ss,line)&&(line.find("SIP/2.0")!=std::string::npos)){appProtocol=APP_PROTO_SIP;}else{appProtocol==APP_PROTO_RTP;}}else{appProtocol=APP_PROTO_UNKNOWN;}}如果内部if语句无法评估为真,我希望

c++ - 开关盒 vs if else

这个问题在这里已经有了答案:Advantageofswitchoverif-elsestatement(23个回答)关闭9年前。我想知道下面的代码编译成汇编的方式是否有什么不同。我听说switch-case比ifelse更有效,但在这个例子中我不太确定情况是否如此。if(x==1){...}elseif(x==2){...}else{...}和switch(x){case1:...break;case2:...break;default:...}

c++ - C中If-Else和三元运算符之间的速度差异...?

所以在一位同事的建议下,我刚刚测试了三元运算符和等效的If-Elseblock之间的速度差异......似乎三元运算符产生的代码比If-快1到2倍别的。我的代码是:gettimeofday(&tv3,0);for(i=0;i(抱歉使用了gettimeofday而不是clock_gettime...我会努力提高自己。)我尝试更改block的计时顺序,但结果似乎仍然存在。是什么赋予了?此外,If-Else在执行速度方面表现出更多的可变性。我应该检查gcc生成的程序集吗?顺便说一句,这都是在优化级别零(-O0)下进行的。这是我的想象,还是有什么我没有考虑到的东西,或者这是一个依赖于机器的东西

c++ - 为什么使用预处理器 #if 语句而不是 if() else?

我看到这一直在做,例如在Linux内核中。使用预处理器命令与仅使用普通C++ifelseblock的目的是什么?有没有速度优势之类的? 最佳答案 预处理器在C/C++代码编译之前更改它(因此是预处理器)。预处理器ifs在编译时求值。C/C++ifs在运行时求值。您可以完成在运行时无法完成的事情。针对不同平台或不同编译器调整代码:#ifdef__unix__/*__unix__isusuallydefinedbycompilerstargetingUnixsystems*/#include#elifdefined_WIN32/*_Wi

c++ - 有if-else,有没有Neither Nor语句?

有没有neitherAnorB语法? 最佳答案 哦......你想要“不是”关键字?VBaddsAin'tKeyword(Newswire8-19-2004)MicrosofthasannouncedthatVisualBasicwilladdthe"Ain't"keywordtothelanguage.AccordingtoasourceontheVB.NETteam"WithVB,wewantthelanguagetoworkthewayyouthink.Extensiveusabilitystudieshavedemonstr

c++ - 方程解析器效率

我花了大约一个月的时间研究原生C++方程式解析器。它可以工作,但速度很慢(比硬编码方程慢30-100倍)。我可以更改什么以使其更快?我阅读了所有我能找到的有关高效代码的内容。概括地说:解析器将字符串方程表达式转换为“操作”对象列表。一个操作对象有两个函数指针:一个“getSource”和一个“evaluate”。为了计算方程式,我所做的只是在操作列表上执行一个for循环,依次调用每个函数。在计算方程式时不会遇到单个if/switch-所有条件都由解析器在最初分配函数指针时处理。我尝试内联函数指针指向的所有函数-没有任何改进。从函数指针切换到仿函数会有帮助吗?如何删除函数指针框架,创建一

c++ - C++ 标准是否强制局部变量的引用捕获效率低下?

这个问题在这里已经有了答案:WhenaC++lambdaexpressionhasalotofcapturesbyreference,thesizeoftheunnamedfunctionobjectbecomeslarge(3个答案)关闭7年前。我最近需要一个通过引用捕获多个局部变量的lambda,所以我做了一个测试片段来研究它的效率,并使用clang3.6用-O3编译它:voiddo_something_with(void*);voidtest(){inta=0,b=0,c=0;autofunc=[&](){a++;b++;c++;};do_something_with((void

c++ - iterator 和 const_iterator 之间的比较是否效率低下?

变体a:constautoend=whatever.end();for(autoit=whatever.begin();it!=end;++it){//...}变体b:constautoend=whatever.cend();//notethecalltocendinsteandofendherefor(autoit=whatever.begin();it!=end;++it){//...}是否有任何理由相信变体b会比变体a效率低,因为循环条件比较两种不同类型的迭代器?这会导致对它进行隐式转换吗?(end在for循环中多次使用,因此我想把它吊出来。) 最佳答